#ifndef __IM_SERVER_UNIX_H__
#define __IM_SERVER_UNIX_H__

#include <im_object.h>
#include <im_server.h>
/**
 * @defgroup IMServerUnix
 * @ingroup PrivateIMBus
 * @{
 */

/** @struct IMServerUnix
 *  @brief Implementation of IMServer interface for Unix systems.
 */

IM_BEGIN_DECLS

#define IM_SERVER_UNIX(p)             (IM_TYPE_INSTANCE_CHECK_CAST((p),IM_TYPE_SERVER_UNIX,IMServerUnix))
#define IM_CONST_SERVER_UNIX(p)       (IM_TYPE_INSTANCE_CHECK_CAST_CONST((p),IM_TYPE_SERVER_UNIX,IMServerUnix))
#define IM_SERVER_UNIX_CLASS(c)       (IM_TYPE_CLASS_CHECK_CAST((c),IM_TYPE_SERVER_UNIX,IMServerUnixClass))
#define IM_IS_SERVER_UNIX(p)          (IM_TYPE_INSTANCE_CHECK_TYPE((p),IM_TYPE_SERVER_UNIX))
#define IM_IS_SERVER_UNIX_CLASS(c)    (IM_TYPE_CLASS_CHECK_TYPE((c),IM_TYPE_SERVER_UNIX))
#define IM_SERVER_UNIX_GET_CLASS(p)   (IM_TYPE_INSTANCE_GET_CLASS_CAST((p),IM_TYPE_SERVER_UNIX,IMServerUnixClass))

typedef struct _IMServerUnix                IMServerUnix;
typedef struct _IMServerUnixClass           IMServerUnixClass;


/**
 * @brief Create a new IMServerUnix object.
 *
 * The newly created IMServerUnix object is owned by the creator
 * (not floating). So creator should unref it explicitly when it's not
 * used anymore.
 */
IMServerUnix*   im_server_unix_new          ();

/**
 * @brief Create a new IMServerUnix object and listen to a specific address.
 *
 * The newly created IMServerUnix object is owned by the creator
 * (not floating). So creator should unref it explicitly when it's not
 * used anymore.
 */
IMServerUnix*   im_server_unix_new_listen   (const IMChar   *address,
                                             IMIOError      *error);
IM_END_DECLS
/** @} */

#endif
/*
vi:ts=4:nowrap:ai:expandtab
*/
